package JZOffer;

import java.util.Stack;

/**
 * @author Lw中
 * @date 2021/9/5 17:23
 */
public class Jz30 {

    // Jz30.包含min函数的栈

    // 使用两个栈实现min函数的栈
    Stack<Integer> A, B;

    /** initialize your data structure here. */
    public Jz30() {
        // A栈用于栈的基本操作
        A = new Stack<>();
        // B栈用于存储最小元素
        B = new Stack<>();
    }

    public void push(int x) {
        A.push(x);
        // 如果B栈为空或者B的peek大于等于X则将元素压栈
        if (B.isEmpty() || B.peek() >= x) {
            B.push(x);
        }
    }

    public void pop() {
        // 当遇到最小元素需要出栈时将A与B栈中的元素共同出栈
        if (A.pop().equals(B.peek())) {
            B.pop();
        }
    }

    public int top() {
        return A.peek();
    }

    public int min() {
        return B.peek();
    }

}
